# -*- coding: utf-8 -*-
# @File  : 查看内存.py
# @Author: zbh
# @Date  : 2025/2/25_15:54

# 使用 psutil 库来查看进程占用的内存大小以及其占总内存的比例。psutil 是一个跨平台库，可用于获取系统信息，包括进程和系统利用率（CPU、内存、磁盘、网络等）
'''
关于psutil库怎么查看cpu，内存，磁盘等系统的信息，请看：
，请看：https://blog.csdn.net/qq_43850584/article/details/132328429?spm=1001.2014.3001.5501
'''
import multiprocessing

import psutil
import time
import os
from multiprocessing.pool import Pool as ProcessPool

def get_process_memory(num):
    # print(f"进程{num}开始运行")
    pid =multiprocessing.current_process().pid # 获取当前进程的进程ID
    process = psutil.Process(pid) # 创建一个进程对象，用于获取进程的内存信息
    memory_usage = round(process.memory_info().rss / 1024 / 1024,2) # 获取进程占用的内存大小（以字节为单位），并将其转换为 MB
    total_memory = round(psutil.virtual_memory().total / 1024 / 1024,2) # 获取总内存大小（以字节为单位），并将其转换为 MB
    memory_percentage = round((memory_usage / total_memory)*100,2) # 获取进程占用的内存大小占总内存的比例
    return num,pid,memory_usage,memory_percentage # 返回进程ID、内存使用量和内存使用率

def main():
    # 创建进程池，查看每个进程的占用内存的大小
    cpu_num = multiprocessing.cpu_count() # 获取CPU的核数
    with  ProcessPool(processes=cpu_num) as pool:
        results = pool.map(get_process_memory, range(cpu_num)) # 分配任务给进程池中的进程，每个进程执行get_process_memory函数，参数为range(4)中的元素
    for result in results:
        num,pid,memory_usage,memory_percentage = result
        print(f"第{num+1}个进程ID：{pid}，内存使用量：{memory_usage} MB，内存使用率：{memory_percentage}%")
        print("-"*30)




if __name__ == "__main__":
    main()





